/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cidetec.business;

import com.cidetec.modelo.dao.mapperinterface.ILibroMapper;
import com.cidetec.modelo.dao.mapperinterface.IPrestamoMapper;
import com.cidetec.modelo.entidad.Libro;
import com.cidetec.modelo.entidad.LibroMateria;
import com.cidetec.modelo.entidad.LibroReferencia;
import com.cidetec.modelo.entidad.LibroUbicacion;
import com.cidetec.utils.Constantes;
import java.io.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Carlos
 */
@Service("AdminSubirArchivoBusiness")
public class AdminSubirArchivoBusiness extends AbstractBusiness {

    private final static Logger logger = LoggerFactory.getLogger(AdminSubirArchivoBusiness.class);

    @Autowired
    private ILibroMapper libroMapper;

    public List<Libro> crearLibrosFromExcel(InputStream inputStream) {
        logger.debug("Inicio de crearLibrosFromExcel");
        FileInputStream file = null;
        HSSFWorkbook workbook = null;
        try {
            file = (FileInputStream) inputStream;
            workbook = new HSSFWorkbook(file);
        } catch (FileNotFoundException ex) {
            logger.debug("Error {}", ex);
            setCodigo(Constantes.CODIGO_ERROR);
            setMensaje(Constantes.LB_ERROR_SISTEMA);
            return null;
        } catch (IOException ex) {
            logger.debug("Error {}", ex);
            setCodigo(Constantes.CODIGO_ERROR);
            setMensaje(Constantes.LB_ERROR_SISTEMA);
            return null;
        }
        HSSFSheet sheet = workbook.getSheetAt(0);
        List<Libro> listLibros = new ArrayList();
        Iterator<Row> rowIterator = sheet.iterator();
        int j = 0;
        while (rowIterator.hasNext()) {
//            int i = 0;
            Libro libro = new Libro();
            LibroReferencia libroReferencia = new LibroReferencia();
            LibroMateria libroMateria = new LibroMateria();
            LibroUbicacion libroUbicacion = new LibroUbicacion();
//            Iterator<Cell> cellIterator = rowIterator.next().cellIterator();
            Row row = rowIterator.next();
            for (int i = 0; i < 14; i++) {
                Cell cell = row.getCell(i);
                if (cell == null) {
                    cell = row.createCell(i);
                    cell.setCellValue("NULO");
                }
                if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                    String valueOf = String.valueOf((int)Math.rint(cell.getNumericCellValue()));
                    cell.setCellValue(valueOf);
                }
                switch (i) {
                    case 0:
                        libro.setCodigoBarras(cell.getStringCellValue());
                        break;
                    case 1:
                        libroReferencia.setIdLibroReferencia(cell.getStringCellValue());
                        break;
                    case 2:
                        libroReferencia.setClasificacionLc(cell.getStringCellValue());
                        break;
                    case 3:
                        libroReferencia.setTitulo(cell.getStringCellValue());
                        break;
                    case 4:
                        libroReferencia.setAutor(cell.getStringCellValue());
                        break;
                    case 5:
                        libro.setNoCopia(cell.getStringCellValue());
                        break;
                    case 6:
                        libroReferencia.setEditorial(cell.getStringCellValue());
                        break;
                    case 7:
                        libroReferencia.setAno(cell.getStringCellValue());
                        break;
                    case 8:
                        libroReferencia.setEdicion(cell.getStringCellValue());
                        break;
                    case 9:
                        libroMateria.setIdMateria(cell.getStringCellValue());
                        break;
                    case 10:
                        libroUbicacion.setUbicacion(cell.getStringCellValue());
                        System.out.println("Ubicacion: " + libroUbicacion.getUbicacion());
                        break;
                    case 11:
                        libro.setFechaAlta(cell.getStringCellValue());
                        break;
                    case 12:
                        libroReferencia.setIsbn10(cell.getStringCellValue());
                        break;
                    case 13:
                        libroReferencia.setIsbn10(cell.getStringCellValue());
                        break;
                    default:
                }
//                i++;
            }
            if (libro != null && j != 0) {
                libro.setLibroMateria(libroMateria);
                libro.setLibroReferencia(libroReferencia);
                libro.setLibroUbicacion(libroUbicacion);
                listLibros.add(libro);
            }
            j++;
        }
        setCodigo(Constantes.CODIGO_BIEN);
        return listLibros;
    }

    @Transactional
    public void createLibro(List<Libro> listLibros) {
        try {
            for (int i = 0; i < listLibros.size(); i++) {
//                logger.debug("Valor del codigo de barras {}", listLibros.get(i).getCodigoBarras());
//                logger.debug("Valor de la ubicacion fisica {}", listLibros.get(i).getUbicacionFisica());
                libroMapper.createLibros(listLibros.get(i));
                setCodigo(Constantes.CODIGO_BIEN);
            }
        } catch (DataAccessException e) {
            e.printStackTrace();
            setCodigo(Constantes.CODIGO_ERROR);
        }
    }

}
